与Solidity相比,用ink!写智能合约的体验更丝滑
作者|Cameron Nazarko
原文|https://medium.com/coinmonks/solidity-vs-ink-for-writing-smart-contracts-8cd31093dd10
本文涵盖了用 Solidity 和 ink!编写智能合约时两者的区别和优势,对 ink!的深入解析,以及它为何会脱颖而出。
智能合约是运行在去中心化网络(如 Edgeware )上的自动执行的自动化应用程序。智能合约是两个人之间以计算机代码形式达成的协议,它们在区块链上运行,因此智能合约存储在公共数据库中,无法更改。关于区块链的好处之一是,由于它是一个分散的系统,存在于所有被允许的当事人之间,因此无需支付中介(中间商)的费用,从而节省了你的时间和冲突。区块链存在其他问题,但无可否认,它们的评级比传统系统更快,更便宜,更安全,这就是银行和政府也转向它们的原因。
为了更好地理解,举个例子:让我们想象一下,John 要购买 Bob 的房子,该协议将使用智能合约在区块链上达成,而该智能合约包含了 John 和 Bob 之间的协议。
用简单的话来说,合约如下所示:“当 Bob 向 John 支付了 150 ETH 时,Bob 将获得房子所有权”。
在这种情况下,如果不使用智能合约,Bob 和 John 将不得不向第三方机构支付大量的费用,包括银行,律师和房屋经纪人。你会发现整个社会都存在这种情况,而使用智能合约几乎可以完成每笔交易。这些智能合约是通过 Solidity 和 ink!这样的编程语言编写的。在本文中,我们将介绍它们之间的区别。
Solidity 是以太坊(世界上最大的区块链平台之一)背后的代码。计算机科学家 Gavin Wood 博士最初在2014年8月提出了 Solidity 语言的概念。该语言后期则以 Christian Reitwiessner 所领导的以太坊团队 Solidity 接手开发。
Solidity 是用于实现智能合约而创建的高级编程语言, Solidity 受 C ++,Python 和 JavaScript 的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。它是一种静态类型的编程语言,在编译时(而不是运行时)执行验证和强制约束的过程。
Solidity 在合约中提供继承属性,包括多重继承。
与 ink!之类的 eDSL(嵌入式领域特定语言)相比,可以说更容易学习,因为 Solidity 与其他常用的高级语言相似。
引入 ABI(应用程序二进制接口),该接口(ABI)可在单一合约中实现多种类型安全的功能。
在以太坊工作中,它被广泛用作首选智能合约程序设计语言,因为它是专门为以太坊而设计的。这意味着有一个更大的社区提供更多的支持,这些社区有时间来解决 Bug ,并提供对用户/开发人员友好的开发环境。
简单的 Solidity 智能合约和基本语法/布局的示例
ink!是基于 Rust 的嵌入式领域特定语言(eDSL),用于编写 Wasm(WebAssembly)智能合约,专门用于由 Parity Technologies 创建的 FRAME Contracts Pallet。同样是由 Gavin Wood 博士创立的 Parity 开发的,用于构建区块链框架的 Substrate ,以及将独立区块链连接在一起的下一代公链平台 ——Polkadot。
Polkadot 中继链本身将不支持智能合约。但是,Polkadot 上的平行链将支持智能合约。智能合约平台 Edgeware 是一个建立在基层之上的自治区块链,该区块链计划与 Polkadot 网络进行绑定,并使用 ink!,因为 ink!是使用 Rust 编程语言编写智能合约的创新解决方案。
ink!为新手和资深开发人员提供了最大的灵活性,因为它选择不发明新的编程语言,而是通过简单地以#[ink(…)] 的形式添加一些属性标签来适应 Rust 的子集,从而使它们融合在一起。Rust 是很棒的语言,特别适合于区块链用例。你在区块链上遇到的许多约束,与在高可靠性嵌入式系统中发现的约束相同,即代码量小、安全性高、可靠性高以及资源占用最少。
简单的ink!示例, 智能合约和基本语法、布局
Wasm 具有高性能,它在保持平台独立性的同时,尽可能地接近本机代码。
它有助于小型二进制文件通过互联网传送到连接速度很慢的设备,这非常适合空间受限的区块链世界。
开发它是为了使代码可以在任何浏览器中部署,并且结果相同。与 EVM 相反,它不是针对特定的用例开发的,这样做的好处是可以使用许多工具,并且大型公司将大量资源投入到推动 Wasm 的开发中。
高效的 JIT 执行:支持 64 位和 32 位整数运算,与 CPU 指令一对一的映射。
Wasm 扩展了可供智能合约开发人员使用的语言家族,包括 Rust,C / C ++,C#,Typescript,Haxe 和 Kotlin,这意味着你可以用你熟悉的任何语言编写智能合约,尽管 Rust 缺乏 Runtime 开销和固有的安全性,我们还是偏爱 Rust。
Rust 生态系统:你可以免费获得 Rust 生态系统提供的所有支持。随着语言的发展,ink!将自动获得对新功能的访问权限,从而改善你将来编写智能合约的方式。
Rust 是一种理想的智能合约语言:具有类型安全性和内存安全性,并且没有未定义的行为。它生成小的二进制文件,因为它不像垃圾回收器那样多余,而且高级优化和 Tree shaking (摇树)可以删除无效的代码。通过编译器标志,Rust 可以自动防止整数溢出。
无开销:运行时间最少。
一流的 Wasm:Rust 为 Wasm 提供了一流的支持。
工具链更全:因为 ink!遵循 Rust 的标准库,比如 rustfmt,clippy 和 rust-analyzer 之类的工具已经可以直接使用。大多数现代文本编辑器中的代码格式设置和语法高亮显示也是如此,Rust 还具有集成测试和基准测试运行程序。
代码存储小:在空间受限的区块链世界里存储大小是非常重要的, Rust 编译器为此提供了极大的帮助。因为它对结构字段进行了重新排序,以使每种类型都尽可能小。因此,Rust 数据结构非常紧凑,在许多情况下甚至比 C 更紧凑。
快照比较
智能合约为当今社会市场中的不同渠道提供解决方案有着巨大的潜力。企业与客户之间的关系建立在信任之上,当信任破裂时,合约就是人们所依赖的。在某些情况下,确实有参与者没有遵守合约的期限,而智能合约可以为这些不可靠的情况提供解决方案,并创造令人愉悦和高效的服务体验。在不需要依赖中介机构的情况下,有助于每个人更接近一个分散、自治的社会。
About Patract
Patract 为波卡 Wasm 合约生态的平行链和 DApp 开发提供解决方案。我们帮助社区平行链设计和开发链上合约模块和 Runtime 支持,并且为 DApp 开发者提供覆盖开发、测试、调试、部署、监控、数据提供和前端开发等阶段的全栈工具和服务支持。